package org.example.service.impl;

import org.example.mapper.AccountMapper;
import org.example.service.AccountService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class AccountServiceImpl implements AccountService {
    // 初始化日志（只关联当前类，简洁）
    private static final Logger log = LoggerFactory.getLogger(AccountServiceImpl.class);

    @Autowired
    AccountMapper accountMapper;

    // 事务注解：确保转账原子性（要么全成，要么全滚）
    @Override
    @Transactional(rollbackFor = Exception.class)
    public void transfer(String outAccount, String inAccount, int money) {
        // 1. 转账开始（关键日志）
        log.info("转账开始：{} → {}，金额：{}元", outAccount, inAccount, money);

        // 2. 转出操作（调试日志，可选，想更简洁可删）
        log.debug("{} 账户转出 {} 元", outAccount, money);
        accountMapper.outBalance(outAccount, money);

        // 测试事务回滚：解开注释会触发异常，日志会显示错误
        // System.out.println(10/0);

        // 3. 转入操作（调试日志，可选）
        log.debug("{} 账户转入 {} 元", inAccount, money);
        accountMapper.inBalance(inAccount, money);

        // 4. 转账成功（关键日志）
        log.info("转账成功：{} → {}，金额：{}元", outAccount, inAccount, money);
    }
}